// @flow

function sum (a:number, b:number){
 return a+b
}

// console.log(sum(100,100))
// console.log(sum('100',100))
// console.log(sum('100',100))

function square(n){
    return n*n
}

console.log(square(100))

let num:number = 100
// num='100'

function add():void{
    // return 100
    // return true
}

const a:string = 'asd'
const b:number = 123 // NaN Infinity
const c:boolean = true // false
const d:null = null 
const e:void = undefined
const f:symbol = Symbol() 

// const arr1:Array<number> = [1,2,3,4,'3'] // 全是数字的数组
const arr1:number[] = [1,2,3,4] // 全是数字的数组
// const arr2:[string,number] = ['1',2,2] // 元组

const obj1:{foo:string, bar:number,age?:boolean}= {
    foo:'123',
    bar:333,
    // age:true
}

const obj3:{[string]:string} = {} // 任意类型只能是字符串
obj3.key1 = 'ccc'
// obj3.key2 = 2323


function foo(callback:(string, number)=> void){ // 函数类型限制
    callback('123',222)
}

// 特殊类型
const aa:'foo' = 'foo'
const type:'success' | 'warning' | 'danger' = 'success'

const aaa: string | number ='1'
type StringOrNumber = string | number
const bbb:StringOrNumber = 234

const gender:?number = null // maybe类型

function passMixed(value:mixed) { // 所有类型 强类型
    // return value * value
}

passMixed(100)

function passAny(value:any) { // 所有类型 弱类型
    return value * value
}

passAny()

// mixed强类型 any弱类型

// 运行环境API
// 内置对象

const element:HTMLElement | null = document.getElementById('app')